package com.pqj.pqaiagent.tool;

import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 网页搜索工具
 */
public class WebSearchTool {

    // SearchAPI 的搜索接口地址  // 常量：定义搜索API的基础URL
    private static final String SEARCH_API_URL = "https://www.searchapi.io/api/v1/search";
    // 私有字段：存储API密钥
    private final String apiKey;

    // 构造函数：初始化时需要传入API密钥
    public WebSearchTool(String apiKey) {
        this.apiKey = apiKey;
    }// 将传入的API密钥赋值给成员变量

    @Tool(description = "Search for information from Baidu Search Engine") // 标记为工具方法，描述为"从百度搜索引擎搜索信息"
    public String searchWeb(
            @ToolParam(description = "Search query keyword") String query) {  // 参数：搜索关键词
        // 创建请求参数Map
        Map<String, Object> paramMap = new HashMap<>();
        // 添加搜索关键词参数
        paramMap.put("q", query);
        // 添加API密钥参数
        paramMap.put("api_key", apiKey);
        // 指定搜索引擎为百度
        paramMap.put("engine", "baidu");
        try {
            // 发送HTTP GET请求并获取响应
            String response = HttpUtil.get(SEARCH_API_URL, paramMap);
             // 将响应字符串解析为JSON对象
            JSONObject jsonObject = JSONUtil.parseObj(response);
            // 从JSON对象中获取organic_results数组（自然搜索结果）
            JSONArray organicResults = jsonObject.getJSONArray("organic_results");
            // 取出返回结果的前 5 条
            List<Object> objects = organicResults.subList(0, 5);
            // 拼接搜索结果为字符串
            String result = objects.stream().map(obj -> {
                // 将每条结果转换为JSON对象
                JSONObject tmpJSONObject = (JSONObject) obj;
                return tmpJSONObject.toString();
            }).collect(Collectors.joining(","));   // 用逗号连接所有结果
            return result;
        } catch (Exception e) {
            return "Error searching Baidu: " + e.getMessage();
        }
    }
}
